package org.zwy.gradetrack.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.zwy.gradetrack.entity.UserRole;

import java.util.List;

/**
 * 用户角色服务接口
 */
public interface UserRoleService extends IService<UserRole> {

    /**
     * 分页查询用户角色列表
     *
     * @param current 当前页
     * @param size 每页大小
     * @param userId 用户ID（可选）
     * @param roleId 角色ID（可选）
     * @return 分页结果
     */
    Page<UserRole> pageUserRoles(Integer current, Integer size, Long userId, Long roleId);

    /**
     * 为用户分配角色
     *
     * @param userId 用户ID
     * @param roleIds 角色ID列表
     * @return 分配结果
     */
    boolean assignRoles(Long userId, List<Long> roleIds);

    /**
     * 移除用户的角色
     *
     * @param userId 用户ID
     * @param roleIds 角色ID列表
     * @return 移除结果
     */
    boolean removeRoles(Long userId, List<Long> roleIds);

    /**
     * 获取用户的所有角色
     *
     * @param userId 用户ID
     * @return 角色列表
     */
    List<UserRole> getUserRoles(Long userId);

    /**
     * 获取角色的所有用户
     *
     * @param roleId 角色ID
     * @return 用户列表
     */
    List<UserRole> getRoleUsers(Long roleId);

    /**
     * 检查用户是否拥有指定角色
     *
     * @param userId 用户ID
     * @param roleId 角色ID
     * @return 是否拥有
     */
    boolean hasRole(Long userId, Long roleId);

    /**
     * 批量导入用户角色数据
     *
     * @param userRoles 用户角色数据列表
     */
    void batchImport(List<UserRole> userRoles);
} 